iT邦幫忙

2022 iThome 鐵人賽

DAY 20
3
Software Development

0到100的軟體工程師面試之路系列 第 20

給面試官的出題建議 / 如果不考Leetcode那要考什麼?

  • 分享至 

  • xImage
  •  

終於進到Leetcode最後一篇了(可喜可賀)

這篇文標題上個月就定好了
最近剛好趕上一波 最近Soft_Job版吵很兇的文章
「R: [討論] 我就問,刷題強者的實務表現?」

首先要提的是,無論在哪個論壇,和別人意見不一樣戰來戰去指正對方邏輯是很正常的
但是開始人身攻擊說別人程度不好之類的就走偏了

筆者覺得Tech_Job版和Soft_Job版的風氣一直都不是很好
第一是我們還是主要在以薪資在定義一個人的成功與否
但每個人的職涯和人生又不像是LOL的積分只有單一面向,
有的人要顧小孩有的人興趣很多有的人工作做得很充實樂此不疲之類的
沒必要總是覺得薪水比較高的人講的話就是比較正確之類的

第二是常常鄉民戰來戰去 結果一個人就去翻另外一個人以前的發文
說你怎麼連這個都要問,想必很程度也是很差
這個對我來説完全就是一個超級反例
有誰不是一路菜過來的?
沒有在論壇上發問菜問題,可能就是當初運氣比較好有拿到比較多的學習資源等等

如果今天是一個不經意就常嘲笑新手的環境,這樣新手反而會怕問題蠢被別人笑而選擇在其他地方默默發問,討論不熱絡的話也就沒有知識豐富的人願意分享心得,最後吃虧的還是自己

今天怕 (因為坦承自己的無知) 被笑,明天一定 (因為長期的無知) 被人笑
樂於分享,願意和他人交流,並正視自己的不足

節錄自jserv大神, from
http://wiki.csie.ncku.edu.tw/embedded/summer2015

已經有D卡,小紅書等新興論壇異軍突起了
希望各個PTT鄉民可以共勉之,努力維護優質論壇環境


筆者身為一個刷了1000題的人
當然是列隊支持刷題仔

對於FANG考刷題,把homebrew作者刷掉
筆者是沒有什麼意見的

雖然確切的數字應該只有HR知道,但網路上隨便查的到的數字
Google的錄取率是0.25%,
也就是收到4~500個履歷的話,(會抓幾個進Phone interview幾個進Onsite筆者也都不知道)
只有一個人會錄取,所以結果論而言最後錄取的當然大部分是那種
5分鐘想出演算法最佳解 coding方面完全0失誤
也盡量考慮所有邊際條件的強者

事實上考刷題的確對FANG來講是最優解
主要是來自不同領域的專業知識根本就互不了解
前端/後端/ML/Linux Kernel/OS/Networking/信號處理演算法/Android/IOS/EDA/幣圈
而且FANG會覺得只要是夠強的人,進來稍微Train一下都會很好用,

如果面試是考小型實作(筆者在台灣亞麻確實有被考domain knowledge較無關的小型實作)
比如說今天有一個做影像演算法的人,你要抓他來寫桌面應用
或是抓JS/python全端工程師抓來寫C++,不管是你考你的實作還是他解釋他以前的實作
一定兩邊都會霧煞煞,
但是對大公司而言他們就不想錯過這種有潛力的其他軟體領域中厲害的人,
因此一個共通的小型演算法題目對45分鐘的面試來說
可以考到合作、溝通表達、英文口說、邏輯/實作、演算法等等等,就是恰恰剛好

事實上很多公司是用聊天來面試,筆者覺得甚是可怕
相信大家都會遇到那種木訥謙虛但是什麼事情都一把罩的工程師
或者是自己明明懂皮毛而已卻講得整個系統都是他寫的一樣的工程師
(會嘴砲也是一種技能 面試官能不能察覺也是一種技能 但通常後者技能會比較差一點)
主管最怕的應該是進來沒產出/不太會寫code的,考小型實作或是leetcode就可以過濾很多


看了系列文
以下想要補充一些支持刷題仔在筆戰時的盲點:

  • 大部分反刷題仔抱怨的並不是FANG考刷題,
    而是小公司薪水給很低
    主考官本身也不是很會leetcode (Kadane演算法的複雜度搞錯,身邊true story)
    但是硬要跟著FANG考刷題

這種公司到底應不應該考刷題的確有待討論
像剛剛提到的,考無論是小型實作還是leetcode的coding都有很多好處
刷題能學到什麼嗎?
裡面的三篇別人寫的文章也都講得非常詳細用leetcode面試的優點

但來考的人不太會,考官也不太會的時候
在這種情況下,考實作/domain knowledge會錯殺不同領域的強者,
那客製化的跟面試者聊天可能還比較有用
(到底有沒有用筆者也不知道答案,
反正如果月薪低到只有三萬那誰都不想會去幹嘛這麼在意這種公司怎麼面試XD)

以下想要補充一些反刷題仔的盲點:

(引用一些鄉民的推發文)

其實考那些演算法小題目原本是很有鑑別力
但自從Leetcode這種面試題庫網站網站出來後
就從智力測驗變成記憶力測驗

有一個共通點是大家對leetcode的印象是
1.刷題就是用背的
2.leetcode網站把面試玩壞

這個說法筆者認為一半對一半不對
在Leetcode只有300題的那個年代如果大家像現在這樣瘋狂刷題
確實是很容易就把面試玩壞了

但實際上,現在Leetcode已經2400題了
扣掉超難的hard和超簡單easy,
適合拿來面試的少說也有1500題

有寫超過500題的應該都能體會,
兩個月前submit的code常常兩個月後看到就是腦袋一片空白,你媽都不認得你拉~
https://ithelp.ithome.com.tw/upload/images/20221019/20152262b1UXL7Fwei.jpg

會有這種刷題就是背一背的印象
也是因為是很多面試官都是主管下來考,平常開會都來不及了,根本沒時間準備新的題目
常常考leetcode前300題或是Top 100 interview questions
的確以前300題裏會考的題目來說,一知半解用背的也是背得起來的

但如果是以台灣Google的面試,對內部出題的競賽仔而言,
題目無窮多,2400題根本算小數字,
那些CSES UVa ACM POJ TIOJ Codeforce的題庫題目更是千變萬化
改個題目敘述,加一加條件變個花樣,根本不怕你去背答案,
Google的原則就是只要Leetcode出現過原題,那就一定不會再考原題,一定會變化一下或是進階題再考一些變化過的(雖然筆者還是有被考一些很經典的medium題目,但是follow up還算是蠻有新意的)
高中數學也就那幾個主題,也不會有人說指考90幾分的人都是背答案背出來的
對有在用心出題的公司而言這些印象是完全不成立的

當初這種考試是希望找到臨場想就能15分鐘想出最佳演算法
實作全無失誤 也考慮所有邊際輸入的真強者
但自從面試題庫網站普及後這種能力鑑別度就會失準

也不是,面試注重的還是溝通
這篇文章解釋得很清楚 大家就再點進去看吧
https://www.ptt.cc/bbs/Soft_Job/M.1664946084.A.661.html


給面試官的出題建議

(這個標題好像下的有點奇怪,筆者沒有實際當面試官還在那邊意見很多XDD)

如果我當面試官的話,我最喜歡的題目是那種漸進式的
由淺到深都要有,適合各種程度的面試者

考一些淺的他會的可以看這個人是不是能把自己會的東西解釋的有條不紊
能不能胸有成竹,會不會有咄咄逼人的感覺,還是一本正經地講錯一些很基本的東西,是不是一個帶新人很適合的人

考一些他不會的可以看他遇到不會的難題的時候會怎麼做
模擬工作上遇到沒有正確解的問題的時候的狀況,他會一點想法都沒有直接當機
還是能夠有什麼樣的觀察甚至找到規律,或是真的太難做不下去有沒有先做一些讓題目變簡單的假設等等等等,跟面試官的求助與溝通
(感謝鄉民讓我看到這個優質補充文章:Re: [問卦] leetcode medium看完答案還是寫不出來

關於由淺到深,舉一個簡單的例子

一開始可以考一題最簡單的背答案也背的出來的Maximum subarray sum(Kadane)
對於秒殺的人 問問他有沒有其他的解法或是為什麼會決定要這樣秒殺

然後再做更多的限制比如說符合條件的subarray裡面
一定要包含某個元素
一定要包含某個位置的元素
如果array element只有1和-1和0的話有沒有什麼特別可以優化的地方

然後再很明顯的把要用到上一題的演算法的這個暗示告訴面試者,
(考他能不能get到hint)
來做一個follow up的下一題(其實這題就是一個leetcode上難度2515的題目)
https://leetcode.com/problems/substring-with-largest-variance/solutions/2039178/weird-kadane/

又或者
考一題最簡單的BFS,
時間夠也可以再考個簡單的二分搜值
最後就可以考個整合的題目(難度分2171)
1970. Last Day Where You Can Still Cross

考這種由淺到深的好處是就算有些人沒有太多刷題經驗,
也是看得出來他其他的溝通和寫code能力如何
不至於直接被難題卡死,而且最後還是可以進階到難度非常難的題目,不怕被破關
(有在努力刷hard的人像壓縮機一樣非常稀少)

或者不想要這麼麻煩也可以在題號900 ~ 最新一題(現在24XX)之間,
隨便選一題讚數倒讚數比不要太差
主題不要太偏的medium(1600~2000)題目,
面試官自己好好練熟之後就可以拿出來考
或是也可以考一些其他網站的難度適中的題目,只要用心找,題目無窮多,像是
https://www.codechef.com/problems/LIGHTHSE


有些人會抱怨他們考刷題了但是招進來的人還是很雷,
或是看過很雷的同事好像因為刷題很強跳去其他考刷題的知名外商公司

筆者認為,想找很強的人/想要有很強的同事
首先.... 薪水要夠高(不然就是工作內容很有趣或是其他很爽的福利)
再來是

不要再考leetcode前300題了
不要再考leetcode前300題了
不要再考leetcode前300題了

越是考前300題的原題,越容易找到其實也沒有很理解的背答案仔
考了刷題但是還是遇到很雷的其實都是考得不夠廣或是不夠深,
筆者倒是還真的沒看過leetcode分數2400以上而且邏輯思考很雷的(至少程式能力方面)


題外話
Online Accessment感覺很容易作弊
但筆者在亞麻和Kronos做的OA都被考得蠻難的
(大概1800~1900)而且時間對刷題不夠多的人來說時間壓得很緊
如果有用這個當第一輪而且刷掉一堆人的話 我是覺得蠻容易錯殺無辜的...


Leetcode篇就這樣倉促的結束了!
如果讀者覺得整個Leetcode篇有任何missing topic
或是需要筆者再補充的問題歡迎跟留言跟我說~


上一篇
推薦的hard題目
下一篇
在你面試前一定要做的事
系列文
0到100的軟體工程師面試之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言